% 设置参数
T = 1;           % 周期
fs = 1000;       % 采样频率
t = -2:1/fs:2;   % 时间向量

% 预定义
N_max = 50;  % 最大谐波数
x = zeros(size(t));  % 初始化信号

% 创建图形窗口
figure('Position', [100, 100, 1200, 500]);

% 主循环
for N = 1:2:N_max  % 只取奇数谐波
    x = x + (4/pi) * (1/N) * sin(2*pi*N*t/T);  % 累加傅里叶级数的谐波分量
    
    % 清除之前的图形
    clf;
    
    % 绘制时域图
    subplot(2,1,1);
    plot(t, x, 'b');
    title(['傅里叶级数 (N = ', num2str(N), ')']);
    xlabel('时间 (s)'); ylabel('振幅');
    xlim([-2 2]); ylim([-1.5 1.5]);
    grid on;
    
    % 计算频域
    L = length(x);
    f = fs*(0:(L/2))/L;
    X = fft(x);
    P2 = abs(X/L);
    P1 = P2(1:floor(L/2)+1);
    P1(2:end-1) = 2*P1(2:end-1);
    
    % 绘制频域图
    subplot(2,1,2);
    stem(f, P1);
    xlim([0 10]);
    title('频域图');
    xlabel('频率 (Hz)'); ylabel('|P1(f)|');
    grid on;
    
    % 更新图形
    drawnow;
    
    % 可选：保存为gif
    % 如果你想保存为gif，取消下面几行的注释
    % frame = getframe(gcf);
    % im = frame2im(frame);
    % [imind,cm] = rgb2ind(im,256);
    % if N == 1
    %     imwrite(imind,cm,'fourier_series.gif','gif', 'Loopcount',inf,'DelayTime',0.5);
    % else
    %     imwrite(imind,cm,'fourier_series.gif','gif','WriteMode','append','DelayTime',0.5);
    % end
end
